

let a: undefined = undefined;
let b; // 此时b的 类型默认是any
const c:1 = 1; // const 是常量所以可以给他一个字面量类型.必须赋值.
const str:'abc' = 'abc';

let strOrNum: number | string; // 如果是联合类型在使用方法的时候 只能采用公共的方法来使用
// strOrNum.split(''); // 报错. number 没有此方法 为了保证安全.
strOrNum = 'asd';
strOrNum.split(''); // 不会报错


// 类型断言

// as断言 一定是联合类型中的某一个
let x: string | number;
(x! as string).charCodeAt(0); // !表示x一定不是空  并断言为string 来使用
(<number>x!).toFixed(3); // x值一定存在 且断言为number 来使用.

let ele = document.getElementById('add');
// ? 表示取值 !表示一定存在
ele!.style.background = '#fff'; // ts写法! 表示值一定存在
// ele?.style.background = 'red'; // 报错
let n = null;
(ele as HTMLElement).style.background = '#fff'; // 断言

(strOrNum! as unknown as boolean); // 双重断言, 一般不建议使用,但还是会用到. 破坏原有的关系.

let direction: 'up' | 'down' | 'left' | 'right' = 'up';
let up:'down' = direction as 'down';

type Direction = 'up' | 'down' | 'left' | 'right'; // 类型别名type. 快速构建一个复用的类型
let direction2: Direction;





export {};
